/**
 * Created by Eoly on 2017/2/16.
 * Call http://palerock.cn
 */
var groupInitPage = angular.module('groupInitPage', ['ngRoute']);


/**
 * 发团
 */
groupInitPage.controller('groupInit', function ($scope, $http) {

    // 第一步团信息
    $scope.groupInfo = {};

    // 第二步商品信息
    $scope.goodInfo = {};

    // 第三步发团信息
    $scope.initGroupInfo = {};

    // 第三步预览信息
    $scope.preGroupInfo = {};

    //声明基础规格数组
    $scope.baseFormats = [];

    //声明规格数组
    $scope.formats = [];

    //声明类型数组
    $scope.goodsTypes = [];

    //声明选中类型
    $scope.goodsType = {};

    //声明规格json
    $scope.goodInfo.groupFormat = {};

    //声明封面图片数组
    $scope.groupImgs = [];

    //声明一组画布,用于展示略缩图
    $scope.imgs = [];

    // 从缓存去获取团信息
    $scope.getInfo = function () {
        var groupInfo = sessionStorage.getItem('ptsc_init_group_info');
        var imgs = sessionStorage.getItem('ptsc_init_group_imgs');
        var goodInfo = sessionStorage.getItem('ptsc_init_good_info');
        var formats = sessionStorage.getItem('ptsc_init_good_formats');
        var baseFormats = sessionStorage.getItem('ptsc_init_good_baseFormats');
        if (groupInfo) {
            $scope.groupInfo = JSON.parse(groupInfo);
        }
        if (goodInfo) {
            $scope.goodInfo = JSON.parse(goodInfo);
            $scope.goodsType.goodsTypeId = $scope.goodInfo.groupGoodType;
        }
        if (imgs) {
            $scope.imgs = JSON.parse(imgs);
        }
        if (formats) {
            $scope.formats = JSON.parse(formats);
        }
        if (baseFormats) {
            $scope.baseFormats = JSON.parse(baseFormats);
        }
        // console.log($scope.groupInfo);
        // console.log($scope.goodInfo);
    };

    // 融合团信息和商品信息
    $scope.mergeInfo = function () {
        $scope.initGroupInfo = Object.assign($scope.groupInfo, $scope.goodInfo);

        //重置封面图片对象数组
        $scope.groupImgs = [];

        for (var k = 0; k < $scope.imgs.length; k++)
            $scope.groupImgs.push($scope.imgs[k].imgName);

        //将获得的封面图片数组对象转化为json字符串用以上传到服务器
        $scope.initGroupInfo.groupImgs = JSON.stringify($scope.groupImgs);

        //暂时储存获取的对象
        var group = $scope.initGroupInfo;

        //转化团封面图片为可识别的url数组
        //声明一个imgSrc接收转化为数组的图片地址
        group.imgSrc = eval(group.groupImgs);
        for (var i = 0; i < group.imgSrc.length; i++)
            //遍历图片地址并加上服务器的url
            group.imgSrc[i] = net + '/resources/img/' + group.imgSrc[i];

        //转化团规格为可识别的对象
        group.format = eval('(' + group.groupFormat + ')');

        //将group在$scope中绑定
        $scope.preGroupInfo = group;

        setTimeout(function () {
            $(function () {
                $.initSwiper($('.content'));
            });
        }, 500);

        console.log($scope.initGroupInfo);
    };

    // 初始化界面和功能
    $scope.suiMobileInit = function (isNotChangeContent) {
        app.suiInit(isNotChangeContent);
        $scope.getInfo();
        $scope.mergeInfo();
        app.adaptPhone();
    };

    // 跳转到第二步
    $scope.gotoStep = function (step) {
        // 储存目前的信息
        sessionStorage.setItem('ptsc_init_group_info', JSON.stringify($scope.groupInfo));
        sessionStorage.setItem('ptsc_init_group_imgs', JSON.stringify($scope.imgs));
        sessionStorage.setItem('ptsc_init_good_info', JSON.stringify($scope.goodInfo));
        sessionStorage.setItem('ptsc_init_good_formats', JSON.stringify($scope.formats));
        sessionStorage.setItem('ptsc_init_good_baseFormats', JSON.stringify($scope.baseFormats));
        switch (step) {
            case 1:
                location.href = '#first';
                break;
            case 2:
                location.href = '#second';
                break;
            case 3:
                location.href = '#third';
                break;
            default:
                return;
        }
    };

    // 清空缓存
    $scope.cleanStorage = function () {
        sessionStorage.removeItem('ptsc_init_group_info');
        sessionStorage.removeItem('ptsc_init_group_imgs');
        sessionStorage.removeItem('ptsc_init_good_info');
        sessionStorage.removeItem('ptsc_init_good_formats');
        sessionStorage.removeItem('ptsc_init_good_baseFormats');
    };

    $scope.leaveOut = function () {
        $.modal({
            title:  '你即将离开发团页面',
            text: '离开发团页面后，你所填写的所有信息将不会保存',
            buttons: [
                {
                    text: '确认离开',
                    onClick: function() {
                        $scope.cleanStorage();
                        app.backLastPosition();
                    }
                },
                {
                    text: '留在这里',
                    onClick: function() {

                    }
                }
            ]
        });
    };


    //获取所有的团商品类型
    $scope.getAllGroupTypes = function () {
        $http.get(net + '/group/find-all-type').then(function (res) {
            if (!res.error) {
                console.log(res.data);
                //将获取的所有商品类型绑定到类型列表
                $scope.goodsTypes = res.data.dataList;
            }
            else
                $.alert("错误代码:" + res.data.error + "," + res.data.mes)
        }, function () {
            $.alert('网络或设置错误');
        })
    };

    //提交团信息
    $scope.handGroupInfo = function () {

        //获取登录信息
        var token = app.getUserToken();

        if (!token) {
            return;
        }

        if (token) {

            $http({
                method: 'post',
                url: net + '/user/group/add-group',
                headers: {'Authorization': 'Bearer ' + token},
                data: $scope.initGroupInfo
            }).then(function (res) {
                console.log(res);
                if (!res.data.error) {
                    $.alert(res.data.mes + '，你的团正在审核中',function () {
                        $scope.cleanStorage();
                        window.location.href = 'my-group.html#my-init-group';
                    });
                } else {
                    $.alert(res.data.mes)
                }
            }, function () {
                $.alert('网络或设置错误');
            })
        }
    };

    //添加商品规格
    $scope.addFormat = function () {
        $scope.formats.push([]);
    };

    //监听用户自己添加的商品规格变化
    $scope.$watch('formats', function () {
        //声明一个规格对象用以储存商品规格
        var format = {};
        for (var i = 0; i < $scope.baseFormats.length; i++) {
            //若获取基础规格不为空
            if ($scope.baseFormats[i][0] && $scope.baseFormats[i][1]) {
                //将规格键值对赋值为对象属性名和值，下标0为规格名，下标1为规格值
                format[$scope.baseFormats[i][0]] = $scope.baseFormats[i][1];
            }
        }

        for (i = 0; i < $scope.formats.length; i++) {
            //若获取基础规格不为空
            if ($scope.formats[i][0] && $scope.formats[i][1]) {
                //将规格键值对赋值为对象属性名和值，下标0为规格名，下标1为规格值
                format[$scope.formats[i][0]] = $scope.formats[i][1];
            }
        }
        //将获得的规格对象转化为json字符串用以上传到服务器
        $scope.goodInfo.groupFormat = JSON.stringify(format);

    }, true);


    //监听商品类型的默认商品规格的变化
    $scope.$watch('baseFormats', function () {
        //声明一个规格对象用以储存商品规格
        var format = {};
        for (var i = 0; i < $scope.baseFormats.length; i++) {
            //若获取基础规格不为空
            if ($scope.baseFormats[i][0] && $scope.baseFormats[i][1]) {
                //将规格键值对赋值为对象属性名和值，下标0为规格名，下标1为规格值
                format[$scope.baseFormats[i][0]] = $scope.baseFormats[i][1];
            }
        }

        for (i = 0; i < $scope.formats.length; i++) {
            //若获取基础规格不为空
            if ($scope.formats[i][0] && $scope.formats[i][1]) {
                //将规格键值对赋值为对象属性名和值，下标0为规格名，下标1为规格值
                format[$scope.formats[i][0]] = $scope.formats[i][1];
            }
        }
        //将获得的规格对象转化为json字符串用以上传到服务器
        $scope.goodInfo.groupFormat = JSON.stringify(format);


    }, true);

    //监听用户选择的商品类型是否发生改变
    $scope.$watch('goodsType.goodsTypeId', function () {

        if($scope.goodsTypes&&$scope.goodsTypes.length==0||!$scope.goodsTypes){
            return;
        }

        for(var k = 0; k<$scope.goodsTypes.length;k++){
            if($scope.goodsTypes[k].goodsTypeId == $scope.goodsType.goodsTypeId){
                $scope.goodsType.goodsTypeFormat = $scope.goodsTypes[k].goodsTypeFormat;
                break;
            }
        }
        console.log($scope.goodsType);

        //若选中商品类型不为空
        if ($scope.goodsType && $scope.goodsType.goodsTypeFormat) {

            //声明一个简单规格对象储存转化后的数组对象
            var simpleFormats = eval($scope.goodsType.goodsTypeFormat);

            //清空基础规格，因为在后面的添加基础规格是使用的push，所有再添加前重置
            $scope.baseFormats = [];

            //对获取的数组对象遍历，将获取的规格名赋储存到基础规格数组中
            for (var i = 0; i < simpleFormats.length; i++) {

                //声明基础规格中的一个单个简单规格，下标0为规格名，下标1为规格值
                var format = [];
                //将每个规格名存储
                format[0] = simpleFormats[i];
                $scope.baseFormats.push(format);
            }

            //将用户选择类型对应的商品类型id储存到团信息中等待提交
            $scope.goodInfo.groupGoodType = $scope.goodsType.goodsTypeId;
        }
    });

    //单次提交图片的函数
    //参数为传入的一个文件类型input
    $scope.img_upload = function (files) {

        //获取登录信息
        var token = app.getUserToken();

        if (!token) {
            return;
        }

        if (!files || !files[0]) {
            return;
        }

        //规定上传到服务器图片的大小
        var needHeight = 300;
        var needWidth = 500;

        //规定略缩图大小
        var smallWidth = needWidth * 0.33;

        //FileReader用来读取本地文件
        var reader = new FileReader();

        //实例化图片用于被加载在画布上
        var img = new Image();

        //声明一个画布对象，当图片上传成功后添加到数组中便于显示
        var img_obj = {};

        //获取当前时间戳作为画布唯一id
        img_obj.id = new Date().getTime();

        //通过将这个画布对象添加到画布组实现自动显示已上传的图片
        var index = $scope.imgs.push(img_obj)- 1;

        //自动刷新双向绑定，预防双向绑定失效
        $scope.$digest();

        //获取预览画布
        var canvas = document.createElement('canvas');
        canvas.width = needWidth;
        canvas.height = needHeight;


        //控制略缩图大小
        canvas.style.width = smallWidth + 'px';

        var ctx = canvas.getContext("2d");

        //当图片加载完毕执行动作
        reader.onload = function () {

            // 通过 reader.result 来访问生成的 DataURL
            img.src = reader.result;

            //获取图片的高宽
            var width = img.width;
            var height = img.height;

            //获取需要使用的矩形图片区域
            var real_width = width * needHeight / needWidth > height ? height * needWidth / needHeight : width;
            var real_height = width > height * needWidth / needHeight ? height : width * needHeight / needWidth;

            //console.log('need:'+real_width+' '+real_height);
            //console.log('real:'+width+' '+height);

            //定位使图片居中
            var img_x = (width - real_width) / 2;
            var img_y = (height - real_height) / 2;

            //清除原来画布内容
            ctx.clearRect(0, 0, needWidth, needHeight);

            //在画布上渲染头像预览
            ctx.drawImage(img, img_x, img_y, real_width, real_height, 0, 0, needWidth, needHeight);

            //将画布渲染的图像转换为base64字符串储存在data中
            var data = canvas.toDataURL();

            //发送POST请求
            $http({

                method: 'post',
                url: net + "/user/image-upload",
                headers: {'Authorization': 'Bearer ' + token},
                data: data

            }).then(function (res) {

                if (!res.data.error) {

                    //将获得的图片名暂时保存
                    $scope.imgs[index].imgName = res.data.data;

                    //将获取图片名转换为路径用以显示
                    $scope.imgs[index].imgAddress = net + '/resources/img/' + $scope.imgs[index].imgName;

                } else {

                    $scope.img_del(index);
                    $.alert('错误代码：' + res.data.error + "," + res.data.mes);
                }


            }, function () {
                $scope.img_del(index);
                $.alert('网络或设置错误');
            })
        };

        //加载选中的图片
        reader.readAsDataURL(files[0]);
    };

    $scope.img_del = function (index) {
        //删除制定下标的封面图片
        $scope.imgs.splice(index, 1);
    };

});

/**
 * 路由
 */
groupInitPage.config(function ($routeProvider) {
    $routeProvider.when('/first', {
        templateUrl: 'html/first-init-content.html',
        controller: 'groupInit'
    }).when('/second', {
        templateUrl: 'html/second-init-content.html',
        controller: 'groupInit'
    }).when('/third', {
        templateUrl: 'html/third-init-content.html',
        controller: 'groupInit'
    }).otherwise({
        redirectTo: '/first'
    });
});